
function getSelectorParams(s) {
	var params = {
		text : s.attr('textField'),
		value : s.attr('valueField'),
		data : s.attr('dataField'),
		url : s.attr('url'),
		onValueChanged : s.attr('onValueChanged'),
		className : s.attr('className'),
		debug : s.attr('debug'),
		parent : s
	};
	return params;
}

function createAllSelector(wrapper) {
	var selectors = wrapper.find('.my-selector');
	for(var i = 0, len = selectors.length; i < len; i++) {
		var s = selectors.eq(i);
		load(s);
	}
};

function generateSelector(params) {
	//params check
	if(isEmpty(params.text) || isEmpty(params.value) || isEmpty(params.parent)) {
		if(isDebug(params))
			alert('select params error!');
		return;
	}
	loadOptions(params);
	
}

function load(s) {
	var params = getSelectorParams(s);
	loadOptions(params);
}

function reload(s, url) {
	s.find('ul').remove();
	var params = getSelectorParams(s);
	params.url = url;

	loadOptions(params);
}

function mySetValue(s, setData) {
	var showLi = s.find('.s_li_show');
	showLi.text(setData.name);
	showLi.attr('data', setData.data);
	showLi.attr('idv', setData.value);
}

function loadOptions(params) {
	var ul = $('<ul class="' + params.className + '"></ul>');
	var liShow = $('<li class="s_li_show" data="">请选择...</li>');

	liShow.click(function() {
		var i_parent = liShow.parent('ul');
		i_parent.find('li.s_li_hide').toggle();
	});

	if(!isEmpty(params.url)) {
		$.ajax({
			url : params.url,
			cache : false,
			success : function(text) {
				jsonArray = eval("(" + text + ")");
				for(var i = 0, len = jsonArray.length; i < len; i++) {
					var item = jsonArray[i];
					var li = $('<li class="s_li_hide" data="' + 
						eval("item." + params.data) + '" idv="' + eval("item." + params.value) + '">' + 
						eval("item." + params.text) + '</li>');

					li.click(function() {
						var i_parent = liShow.parent('ul');
						var oldValue = liShow.attr('idv');
						i_parent.find('li.s_li_hide').hide();
						liShow.text($(this).text());
						liShow.attr('data', $(this).attr('data'));
						liShow.attr('idv', $(this).attr('idv'));
						//执行valueChanged，暂时先不判断值是否真的变化了
						if(!isEmpty(params.onValueChanged) && oldValue != $(this).attr('idv'))
							eval(params.onValueChanged + "(params.parent)");
					});
					ul.append(li);
				}
			}
		});
	}
	ul.append(liShow);
	params.parent.append(ul);
}

function isDebug(params) {
	return params.debug != null && params.debug == 1;
}

function isEmpty(str) {
	return str == null || str == '';
}